Creazione di una nuova tabella.
Finora ci siamo limitati ad utilizzare un database
soltanto per crearlo, cancellarlo o visualizzare la lista delle tabelle che lo
compongono e senza alcun dubbio non ne abbiamo sfruttato le potenzialità.
In questa nuova lezione vedremo come strutturare una nuova tabella, comprenderne
le insidie di alcuni tipi di dato e comprendere l'importanza dei campi unici,
anche se alcuni di voi lo sapranno se hanno dimestichezza con Access.
Creare una tabella è un operazione abbastanza semplice, mentre la strutturazione
dei campi richiede un po’ più di concentrazione; infatti la creazione di
una semplice tabella deve essere sempre preceduta dalla chiarezza mentale nel
dare il giusto numero di campi da inserirvi ed il tipo di ciascuno di essi.
Naturalmente avremo sempre un esempio a portata di mano che ci aiuterà a
comprendere meglio i singoli passi che ci porteranno alla creazione della nostra
tabella. Nella fattispecie l'esempio tratterà un archivio musicale.
Naturalmente dobbiamo pensare ai campi che comporranno questa tabella, che una
volta creata ognuno di voi potrà personalizzare a suo piacimento, denominata
musica ed essi potrebbero essere:
Nome del campo |
Descrizione |
id |
Numero di identificazione univoco del record. |
titolo |
Titolo dell'album, della raccolta o della compilation. |
artista |
Nome dell'artista o degli artisti vari (AA.VV.). |
etichetta |
Il nome della casa discografica che lo produce. |
formato |
CD, cassetta o, magari, vinile. |
data |
La data di acquisto del CD. |
note |
Eventuali note personali all'album o all'artista. |
I campi sopraelencati nella tabella sono destinati a contenere un tipo di dato che definisce le caratteristiche dell'informazione che può esservi memorizzata. Per alcuni campi può essere definita la lunghezza massima prevista dal campo, per altri no. E' molto importante definire i campi in modo appropriato, per esempio se definiamo un campo di tipo varchar di 50 caratteri e noi nel suo campo inseriamo una stringa da 100 essa verrà troncata al 50° carattere. Inoltre bisognerà prestare molta attenzione nella sintassi SQL in quanto una sua compilazione non corretta porterebbe a non creare la tabella. qui sotto riportiamo alcuni dei tipi di dato più utilizzati:
Tipi di dato |
Descrizione |
Definizione lunghezza |
INT |
Un intero, di dimensioni normali compreso tra 0 e 4294967295. |
Non obbligatoria, per default 11 |
FLOAT |
Un numero a virgola mobile (es. un valore monetario). |
Non obbligatorio, per default 10,2 dove 2 è il numero dei decimali |
DATE |
Una data nel formato AAAA-MM-GG. |
No. |
CHAR |
Una stringa della lunghezza fissa tra 1 e 255 caratteri. |
Non obbligatoria, per default 1. |
VARCHAR |
Una stringa di lunghezza variabile tra 1 e 255 caratteri. |
Si. |
TEXT |
Un campo con lunghezza massima 65535 caratteri. |
No. |
Dalla prima tabella ci rendiamo
conto dell'utilità dei campi univoci (ID) per ogni record; essi ci aiuteranno a
tener traccia dei dati immessi e sarà utile anche nella relazione tra più
tabelle.
Come detto nella tabella musica abbiamo inserito il campo univoco ID,
anziché il campo titolo in quanto, come molti sanno, il titolo di un CD
può essere uguale anche se l'artista è differente, quindi il tutto corrisponda a
due lavori diversi.
Scrivere una sequenza di due moduli per creare una tabella di un database può sembrare un operazione ostica in quanto finora per creare una tabella d'esempio avevamo utilizzato (vedi installazione di MySQL) una semplice riga di comando in DOS del tipo:
create table tabella_test (id int, note text);
se utilizziamo uno script in PHP per
inviare la stessa interrogazione a MySQL, e creare quindi la stessa tabella, non
facciamo altro che rendere più attraente il procedimento con un'interfaccia di
interrogazione detta anche interfaccia amministrativa.
Per creare questa interfaccia cominceremo definendo un modulo HTML, per passare
poi a creare lo script PHP che recuperi i dati dal modulo e crei dinamicamente
un secondo modulo. Infine creeremo uno script che invii realmente la stringa di
interrogazione SQL.
Dividiamo il lavoro in fasi:
Fase 1: il numero dei campi.
Apriamo il nostro buon vecchio Blocco Note e digitiamo il seguente codice HTML e salviamolo con il nome di creatabella.htm:
<html><head><title>Creazione di una
tabella in un database: fase 1</title></head>
<body>
<h1>Fase 1: Nome della tabella e numero dei campi</h1>
<form method="post" action ="defcampi.php">
<p><b>Nome della tabella:</b><br>
<input type="text" name="tabella" size=25>
<p><b>Numero dei campi:</b><br>
<input type="text" name="campi" size=5>
<p><input type="submit" name="invio" value="Vai alla fase 2">
</form>
</body>
</html>
In questa fase abbiamo creato il nome e il numero di campi necessari alla creazione della nostra tabella; adesso, nella fase 2, dobbiamo definire in maniera approfondita il nome, il tipo e la lunghezza dei campi.
Apriamo come sempre il nostro Blocco Note, digitiamo il seguente codice e salviamolo con il nome di defcampi.php:
<?
if ((!$tabella) || (!$campi))
{
header("Location:http://localhost/creatabella.htm");
exit;
}
$modulo = "
<form method=\"post\" action=\"creatabella.php\">
<input type=\"hidden\" name=\"tabella\" value=\"$tabella\">
<table><tr><td><b>Nome Campo</td><td><b>Tipo campo</td><td><b>Lunghezza</td></tr>
";
for ($i=0; $i<$campi; $i++)
{
$modulo .= "
<tr><td align=\"center\"><input type=\"text\" name=\"campo[]\" size=\"25\"></td>
<td align=\"center\">
<select name=\"tipo[]\">
<option value=\"char\">char</option>
<option value=\"date\">date</option>
<option value=\"float\">float</option>
<option value=\"int\">int</option>
<option value=\"text\">text</option>
<option value=\"varchar\">varchar</option>
</select></td>
<td align=\"center\"><input type=\"text\" name=\"lunghezza[]\" size=\"5\"></td></tr>
";
}
$modulo .= "
<tr><td align=\"center\"><input type=\"submit\" value=\"Crea la tabella\"></td></tr>
</table></form>
";
?>
<html><head><title>Creazione di una tabella. Fase 2</title></head>
<body>
<h1>Definizione dei campi della tabella <? echo "$tabella"; ?></h1>
<? echo "$modulo"; ?>
</body>
</html>
Terminata la seconda fase dobbiamo, come già detto in precedenza, creare l'interrogazione SQL per la creazione della tabella:
Apriamo come sempre il nostro Blocco Note, digitiamo il seguente codice e salviamolo con il nome di creatabella.php:
<?
$nome = "test1";
$connessione = mysql_connect("localhost", "nomeutente", "password")
or die("Impossibile stabilire una connessione.");
$db = mysql_select_db($nome, $connessione)
or die("Impossibile selezionare il database.");
$sql = "CREATE TABLE $tabella (";
for ($i=0; $i<count($campo);
$i++)
{
$sql .= "$campo[$i] $tipo[$i]";
if ($lunghezza[$i] != "") { $sql .= "
($lunghezza[$i]),"; }
else { $sql .= ","; }
}
$sql = substr($sql, 0, -1);
$sql .= ")";
$ris = mysql_query($sql,$connessione)
or die("Impossibile
eseguire l'interrogazione al database.");
if ($ris)
{ $msg = "<p><h2>La tabella $tabella è stata
creata.</h2>"; }
?>
<html><head><title>Creazione di una tabella nel database: Fase 3</title></head>
<body>
<p><h1>Creazione di una tabella nel database <? echo "$nome"; ?></h1>
<? echo "$msg"; ?>
</body>
</html>